查看原文
其他

十大类型的安全测试工具及其应用场景

THOMAS SCANLON 软件质量报道 2022-11-04

本文来自卡耐基梅隆大学SEI

软件中的漏洞和弱点很常见:84%的软件漏洞都是利用应用层的漏洞。软件相关问题的普遍性是使用应用安全测试(AST)工具的主要动机。随着越来越多的应用安全测试工具的出现,信息技术(IT)领导、开发人员和工程师可能会感到困惑——不知道哪些工具可以解决哪些问题。这篇文章将通过对不同类型的AST工具进行分类,并指导说明何时何地、如何使用每一类工具,从而帮助你面对海量的这类工具做出选择。


应用安全不是一个简单的二元选择——要么有安全、要么没有,应用安全更像是一个滑动的尺度,提供额外的安全层有助于降低事件的风险,希望能达到组织可接受的风险水平。因此,应用安全测试减少了应用的风险,但不能完全消除它。然而,可以采取一些措施来消除那些最容易消除的风险,并加强使用中的软件。

使用AST工具的主要动机有:手工代码审查和传统的测试计划很耗时,而且新的漏洞不断被引入或发现。在许多领域中,有监管和合规指令要求使用AST工具。此外,也许是最重要的,意图破坏系统的黑客也会使用工具,那些负责保护这些系统的人必须跟上对手的步伐。

使用AST工具有很多好处,它可以提高测试应用程序的速度、效率和覆盖率。它们所进行的测试是可重复的,并能很好地扩展:一旦在一个工具中开发了一个测试案例,它就可以针对大量的代码进行测试,而带来的额外成本很少。AST工具可以有效地发现已知的漏洞、问题和弱点,它们使用户能够对发现的问题进行分流和分类。它们还可以用于修复工作流程,特别是在验证中,它们可以用来关联和识别趋势和模式。


1. 应用安全测试工具指南


这张图描述了应用安全测试工具的类别或分类。边界有时是模糊的,因为特定的产品可以执行多个类别的元素,但这些是安全测试工具的大致类别。有一个粗略的层次结构,即金字塔底部的工具是基础性的,随着对它们的熟练掌握,组织可能会寻求使用金字塔中、上层的、一些更先进的方法和工具。

1)静态应用安全测试(SAST)

SAST工具可以被认为是白盒测试,测试人员知道被测试的系统或软件的信息,包括架构图、源代码等。SAST工具扫描源代码(静态分析),以检测和报告可能导致安全漏洞的弱点。

源代码分析器可以在非编译的代码上运行,以检查缺陷,如数字错误、输入验证、竞争条件、路径遍历、指针和引用等。二进制和字节码分析器在已构建/编译的代码上做同样的工作。有些工具只在源代码上运行,有些只在编译后的代码上运行,有些则两者都可以。


2)动态应用安全测试(DAST)

与SAST工具相比,DAST工具可以被认为是黑盒测试,测试者事先对系统没有了解。DAST检测以发现应用程序在运行状态下存在安全漏洞的情况。DAST工具在代码运行状态进行操作,以检测接口、请求、响应、脚本(即JavaScript)、数据注入、会话、认证等方面的问题。

DAST工具采用模糊法:通常向一个应用程序抛出大量、已知的无效和意外的测试用例(测试数据)。


3)起源分析/软件构成分析(SCA)

依靠人工检查的软件治理过程很容易失败。SCA工具检查软件以确定软件内所有组件和库的来源是否存在问题,它在识别和发现普通和流行组件,特别是开源组件的漏洞方面非常有效。但是,它们不能检测内部定制开发的组件的漏洞。

SCA工具的工作方式是将代码中发现的已知模块与已知漏洞列表进行比较。SCA工具可以找到具有已知和记录的漏洞的组件,并且通常会给出组件是否已经过期或有补丁可用。

为了进行这种比较,几乎所有的SCA工具都使用NIST国家漏洞数据库(NVD:https://nvd.nist.gov/)的 "常见漏洞和暴露"(CVEs)作为已知漏洞的来源。许多商业SCA产品也使用商业漏洞数据库VulnDB(https://vuldb.com/zh/)作为来源,以及其他一些公共和专有来源。SCA工具可以在源代码、字节码、二进制代码或一些组合上运行。


4)数据库安全扫描

2003年的SQL Slammer蠕虫病毒利用了一个数据库管理系统中的已知漏洞,该系统的补丁在攻击发生前一年多就已经发布。虽然数据库并不总是被认为是应用程序的一部分,但应用程序的开发者往往严重依赖数据库,而应用程序往往会严重影响数据库。数据库安全扫描工具检查更新的补丁和版本、弱口令、配置错误、访问控制列表(ACL)问题等等。一些工具可以挖掘日志,寻找不规则的模式或行动,如过度的管理行动。

数据库扫描器通常在数据库管理系统运行时,运行在静态的数据上。一些扫描器可以监测正在传输中的数据。


5)交互式应用安全测试(IAST)和混合工具

混合方法已经存在了很长时间,但最近被归类并使用IAST这个术语来定义。IAST工具使用静态和动态分析技术的组合,可以测试代码中的已知漏洞在运行的应用程序中是否真的可以被利用。

IAST工具使用应用程序流和数据流的知识来创建高级攻击场景,并递归地使用动态分析结果:在进行动态扫描时,该工具将根据应用程序对测试用例的响应情况来学习有关的东西。一些工具将使用这些知识来创建额外的测试案例,然后可以产生更多的知识,用于更多的测试用例,以此类推。IAST工具善于减少假阳性的数量,并容易适应/匹配敏捷和DevOps环境,因为传统的独立DAST和SAST工具对开发周期来说可能过于费时。


6)移动应用安全测试(MAST)

开源Web应用安全项目(OWASP)在2016年列出的十大移动风险为:

  1. 不当的平台使用
  2. 不安全的数据存储
  3. 不安全的通信
  4. 不安全的认证
  5. 不充分的密码学
  6. 不安全的授权
  7. 客户端代码质量
  8. 篡改代码
  9. 逆向工程
  10. 不相干的功能
MAST工具是静态、动态和取证分析的融合,执行一些与传统静态和动态分析器相同的功能,但也会通过这些分析器来检测移动代码。MAST工具有专门的功能,专注于移动应用的特定问题,如设备的越狱或获得root权限、欺骗的WI-FI连接、证书的处理和验证、防止数据泄漏等。

7)应用安全测试即服务(ASTaaS)

顾名思义,你付钱给服务商,然后通过其ASTaaS平台对你的应用程序进行安全测试。该服务通常是静态和动态分析、渗透测试、API测试、风险评估等的组合。ASTaaS可以应用于传统的应用程序(特别是移动和Web应用程序)。

ASTaaS的使用势头来自于云应用的使用,云平台的测试资源更容易被调动起来。全球公共云计算的支出从2015年的670亿美元增加到2020年的1620亿美元。


8)相关性工具(Correlation Tools)

处理误报是应用安全测试的一个大问题。相关性分析工具(如 Code Dx by Synopsys)可以帮助减少一些噪音,为其他AST工具的发现提供一个中央存储库。

不同的AST工具会有不同的发现,所以相关性工具会关联和分析来自不同AST工具的结果,并帮助验证和优先处理发现的问题,包括补救工作流程。虽然一些相关性工具包括代码扫描器,但它们主要用于从其他工具导入结果。


9)测试覆盖率分析器

测试覆盖率分析器度量总的程序代码有多少被分析了。其结果可以用语句覆盖率(测试的代码行数百分比)或分支覆盖率(测试的可用路径百分比)来表示。

对于大型应用程序,可以事先确定可接受的覆盖率水平,然后与测试覆盖率分析器产生的结果进行比较,以加速测试和发布过程。这些工具还可以检测出在实际的程序执行过程中是否有特定的代码行或逻辑分支无法到达,这是不高效的,也是潜在的安全问题。一些SAST工具正在将这一功能纳入其产品,但也存在独立的产品,只是不那么常见。


10)应用安全测试编排(ASTO)

ASTO将安全工具整合到软件开发生命周期(SDLC)中。虽然ASTO这个词是Gartner新创造的,因为这是一个新兴的领域,但有一些工具已经在做ASTO了,主要是那些由相关工具供应商创造的。ASTO的想法是对一个生态系统中运行的所有不同的AST工具进行集中、协调的管理和报告。随着自动化测试变得更加普遍,ASTO确实填补了一个需求。


2. 选择测试工具类型

从这些不同类型的AST工具中选择时,有许多因素需要考虑。如果想知道如何开始,你最明知的决定就是开始使用这些工具,实践出真知。根据微软早期的一项安全研究,76%的美国开发者没有使用安全的应用程序开发流程,全球超过40%的软件开发者表示安全不是他们的首要任务,而我们最强烈的建议是:你把自己排除在这些百分比之外(视安全为首要任务,遵守安全的应用程序开发流程)

有一些因素可以帮助你决定使用哪类AST工具,并决定使用AST工具类中的哪些产品。然而,需要注意的是,没有一个工具可以解决所有问题。如上所述,安全不是二进制的,目标是减少风险和暴露,所以一般会选择多个工具。

在研究具体的AST产品之前,首先要确定哪类AST工具适合于你的应用。在应用软件测试变得越来越复杂之前,大多数工具将使用金字塔底层的AST工具,在下图中以蓝色显示。这些是最成熟的AST工具,可以发现大多数常见的安全漏洞。



在达到熟练程度和获得良好经验之后,你可以考虑增加一些第二级的方法(下图中蓝色显示的)。例如,许多移动平台的测试工具提供了框架,让你编写自定义的脚本进行测试。拥有一些传统DAST工具的经验将使你能够编写更好的测试脚本。同样,如果你拥有良好的金字塔底层4类工具的使用经验,你将更有能力参与ASTaaS合同的条款和功能的谈判。


如何决定采用金字塔最上面的三个工具,既要考虑管理和资源方面的因素,也要考虑技术因素。
如果你只能实施一个AST工具下,面是一些关于选择哪种类型工具的指南:
  • 如果应用程序是内部编写的或可以访问源代码,一个好的起点是运行一个SAST工具,检查编码问题和对编码标准的遵守情况。事实上,SAST是启动代码分析的最常见的起点。

  • 如果应用程序不是在公司内部编写的或无法访问源代码,那么DAST是最好的选择。

  • 无论你是否能访问源代码,如果已知应用程序中使用了大量的第三方和开源组件,那么SCA工具就是最好的选择。理想情况下,SCA工具与SAST/DAST工具一起运行,但如果资源只允许实施一种工具,SCA工具对于有第三方组件的应用程序来说是必不可少的,因为它们能检查已经广为人知的漏洞。


3. 总结和展望

从长远来看,在开发过程中加入AST工具,应该可以通过提前发现问题来节省重新工作的时间和精力。然而,在实践中,实施AST工具需要在初期投入一些时间和资源。上面的指导是为了帮助你选择一个合适的起点。在开始使用AST工具后,它们可以产生大量的结果,必须有人对它们进行管理和行动。



这些工具也有很多旋钮和按钮用于校准输出,但要把它们设置在一个理想的水平上需要时间。如果工具设置不正确,假阳性和假阴性都会带来麻烦。

后续,我将更详细地考虑这些决策因素,并以列表的形式提出指导意见,负责应用安全测试的人可以很容易地浏览并作为检查表使用。


其他资源
  • 美国国家标准与技术研究所(NIST)的软件保障指标和工具评估(SAMATE)项目:https://www.nist.gov/itl/ssd/software-quality-group/samate
  • 开放网络应用安全项目(OWASP):https://owasp.org/
  • SANS研究所:https://www.sans.org/apac/
  • CMU SEI关于安全开发内容:https://www.sei.cmu.edu/our-work/secure-development/
  • 查看美国国土安全部(DHS)的Build Security In网站:https://www.cisa.gov/uscert/bsi , https://www.dhs.gov/blog/2014/10/10/secure-development-it-products
  • 2021年软件测试工具总结——安全性测试工具
  • 好消息:有免费工具能彻底分析Log4J 严重的RCE漏洞

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存